Imports JS.Nativo.DTO.Contable

Namespace Contable

    Public Class frmBuscarConceptoCtaCte

        Private mConceptoCuentaCorriente As ConceptoCuentaCorrienteDTO
        Public Property ConceptoCuentaCorriente() As ConceptoCuentaCorrienteDTO
            Get
                Return mConceptoCuentaCorriente
            End Get
            Set(ByVal value As ConceptoCuentaCorrienteDTO)
                mConceptoCuentaCorriente = value
            End Set
        End Property

        Private mConceptosCuentaCorriente As ConceptoCuentaCorrienteDTO()
        Public Property ConceptosCuentaCorriente() As ConceptoCuentaCorrienteDTO()
            Get
                Return mConceptosCuentaCorriente
            End Get
            Set(ByVal value As ConceptoCuentaCorrienteDTO())
                mConceptosCuentaCorriente = value
            End Set
        End Property

        Protected Overrides Function Autorizado() As Boolean
            'TODO: completar
            Return True
        End Function

        Private Sub frmBuscarConceptoCtaCte_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            CargarNodos()
        End Sub

        Private Sub CargarNodos()
            treArbol.Nodes.Clear()
            If ConceptosCuentaCorriente IsNot Nothing Then
                Dim listaRaices As New List(Of ConceptoCuentaCorrienteDTO)
                Dim listaResto As New List(Of ConceptoCuentaCorrienteDTO)
                For Each concepto As ConceptoCuentaCorrienteDTO In ConceptosCuentaCorriente
                    If Not concepto.IdConceptoCuentaCorrientePadre.HasValue Then
                        listaRaices.Add(concepto)
                    Else
                        listaResto.Add(concepto)
                    End If
                Next
                For Each concepto As ConceptoCuentaCorrienteDTO In listaRaices
                    Dim nodo As New TreeNode(concepto.Descripcion)
                    nodo.Tag = concepto
                    treArbol.Nodes.Add(nodo)
                    'Si es el actual lo selecciono
                    If Me.ConceptoCuentaCorriente IsNot Nothing AndAlso concepto.IdConceptoCuentaCorriente = Me.ConceptoCuentaCorriente.IdConceptoCuentaCorriente Then
                        treArbol.SelectedNode = nodo
                    End If
                    CargarNodo(nodo, listaResto)
                Next
            End If
        End Sub

        Private Sub CargarNodo(ByVal pNodo As TreeNode, ByVal pRestantes As IList(Of ConceptoCuentaCorrienteDTO))
            Dim concepto As ConceptoCuentaCorrienteDTO = pNodo.Tag
            Dim restantes As New List(Of ConceptoCuentaCorrienteDTO)(pRestantes)
            For Each restante As ConceptoCuentaCorrienteDTO In pRestantes
                If restante.IdConceptoCuentaCorrientePadre.Value = concepto.IdConceptoCuentaCorriente Then
                    'Voy eliminando los nodos que voy colocando en el arbol
                    restantes.Remove(restante)
                    Dim nodo As New TreeNode(restante.Descripcion)
                    nodo.Tag = restante
                    pNodo.Nodes.Add(nodo)
                    'Si es el actual lo selecciono
                    If Me.ConceptoCuentaCorriente IsNot Nothing AndAlso restante.IdConceptoCuentaCorriente = Me.ConceptoCuentaCorriente.IdConceptoCuentaCorriente Then
                        treArbol.SelectedNode = nodo
                    End If
                    CargarNodo(nodo, restantes)
                End If
            Next
        End Sub

        Private Sub butAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butAceptar.Click
            Me.ConceptoCuentaCorriente = treArbol.SelectedNode.Tag
        End Sub

        Private Sub treArbol_NodeMouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles treArbol.NodeMouseDoubleClick
            Me.ConceptoCuentaCorriente = e.Node.Tag
            Me.DialogResult = Windows.Forms.DialogResult.OK
            Me.Close()
        End Sub

    End Class

End Namespace
